package com.temple.common.utils;


import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Date;


public class CommonUtils {

	/**
	 * @return java.lang.String
	 * @Author matt
	 * @Description 手机号码前三后四脱敏
	 * @Date 19:08 2019/10/30 0030
	 * @Param [mobile]
	 **/
	public static String mobileEncrypt(String mobile) {
		if (StringUtils.isEmpty(mobile) || (mobile.length() != 11)) {
			return mobile;
		}
		return mobile.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
	}

	/**
	 * @return java.lang.String
	 * @Author matt
	 * @Description 身份证前三后四脱敏
	 * @Date 19:08 2019/10/30 0030
	 * @Param [id]
	 **/
	public static String idEncrypt(String id) {
		if (StringUtils.isEmpty(id) || (id.length() < 8)) {
			return id;
		}
		return id.replaceAll("(?<=\\w{3})\\w(?=\\w{4})", "*");
	}

	/**
	 * @return java.lang.String
	 * @Author matt
	 * @Description 护照前2后3位脱敏，护照一般为8或9位
	 * @Date 19:08 2019/10/30 0030
	 * @Param [id]
	 **/
	public static String idPassport(String id) {
		if (StringUtils.isEmpty(id) || (id.length() < 8)) {
			return id;
		}
		return id.substring(0, 2) + new String(new char[id.length() - 5]).replace("\0", "*") + id.substring(id.length() - 3);
	}


	/**
	 * 获取日期增减后的起始时刻
	 *
	 * @param dayNum dayNum > 0 时间后推 dayNum < 0 时间前推
	 * @return
	 */
	public static Date getDayStartTime(int dayNum) {
		Calendar ca = Calendar.getInstance();
		ca.add(Calendar.DAY_OF_YEAR, dayNum);
		ca.set(Calendar.HOUR_OF_DAY, 0);
		ca.set(Calendar.MINUTE, 0);
		ca.set(Calendar.SECOND, 0);
		ca.set(Calendar.MILLISECOND, 0);
		return ca.getTime();
	}

	/**
	 * 获取机构号
	 */
	public static Long getTisid(HttpServletRequest request) {
		String tisid = request.getHeader("tisid");
		return Long.valueOf(StringUtils.isBlank(tisid) ? "0" : tisid);
	}

	/**
	 * 图片路径补全
	 *
	 * @param picPath 无图片访问域名的图片路径 ，多张图用英文逗号（','）分隔
	 * @return 完整图片访问路径
	 */
	public static String[] getFullPicUrls(String picBaseUrl, String[] picPath) {
		if (picPath == null || picPath.length > 0) {
			return new String[0];
		}

		for (int i = 0, length = picPath.length; i < length; i++) {
			if (StringUtils.isNotBlank(picPath[i]) && picPath[i].startsWith("http")) {
				picPath[i] = picBaseUrl + picPath[i];
			}
		}
		return picPath;
	}

	/**
	 * 图片路径补全
	 *
	 * @param picPathStr 无图片访问域名的图片路径 ，多张图用英文逗号（','）分隔
	 * @return 完整图片访问路径
	 */
	public static String[] getFullPicUrls(String picBaseUrl, String picPathStr) {
		String[] picPath = picPathStr.split(",");
		if (picPath == null || picPath.length > 0) {
			return new String[0];
		}
		for (int i = 0, length = picPath.length; i < length; i++) {
			if (StringUtils.isNotBlank(picPath[i]) && picPath[i].startsWith("http")) {
				picPath[i] = picBaseUrl + picPath[i];
			}
		}
		return picPath;
	}

	/**
	 * 图片路径补全
	 *
	 * @param picPath 无图片访问域名的图片路径 ，多张图用英文逗号（','）分隔
	 * @return 完整图片访问路径
	 */
	public static String getFullPicUrl(String picBaseUrl, String picPath) {
		if (StringUtils.isBlank(picPath)) {
			return picPath;
		}
		if (picPath.startsWith("http")) {
			return picPath;
		}
		return picBaseUrl + picPath.replace(",", "," + picBaseUrl);
	}

	/**
	 * 格式化字符串类型金额
	 * @param price 未格式化的金额
	 * @return 格式化的金额
	 */
	public static String moneyFormate(String price) {
		if (StringUtils.isBlank(price)) {
			return price;
		}
		String[] priceArray = price.split("\\.");
		if (priceArray.length < 2) {
			return price.indexOf(".") != -1 ? price + "00" : price + ".00";
		}
		String integerMoney = StringUtils.isBlank(priceArray[0])? "0":priceArray[0];
		if (priceArray[1].length() < 2) {
			return integerMoney + "." + priceArray[1] + "0";
		} else if (priceArray[1].length() == 2) {
			return integerMoney+"." + priceArray[1];
		} else {
			return integerMoney + "." + priceArray[1].substring(0, 2);
		}
	}

	/**
	 * 格式化金额
	 *
	 * @param price
	 * @return
	 */
	public static BigDecimal moneyFormate(BigDecimal price) {
		return price.setScale(2, BigDecimal.ROUND_DOWN);
	}

	/**
	 * 格式化金额
	 *
	 * @param price
	 * @return
	 */
	public static String moneyFormateToString(BigDecimal price) {
		price = price.setScale(2, BigDecimal.ROUND_DOWN);
		return price.toString();
	}
}
